/* 
 * File:   Cerdito.cpp
 * Author: 75.02 - Grupo 7, 2do cuatrimestre 2012.
 * 
 * Created on November 2, 2012, 1:43 PM
 */

#include "Cerdito.h"
using namespace TP::Juego::Arena::Actores;

Cerdito::Cerdito() : Actor("", new Rol (CERDITO, CERDITO)){}

Cerdito::Cerdito(const string& pNombre) : Actor(pNombre, new Rol (CERDITO, CERDITO)){}

Cerdito::~Cerdito() {}

IColisionado* Cerdito::colisionar (IColisionado* pColisionado){
    //@todo: Implementar Cerdito.Colisionar.
}

string Cerdito::aXML(){

    TiXmlDocument* doc = new TiXmlDocument();
    TiXmlDeclaration * decl = new TiXmlDeclaration( "1.0", "", "" );
    doc->LinkEndChild( decl );
    
    doc->LinkEndChild(this->aElementoXML());

    TiXmlPrinter printer;
    doc->Accept(&printer);
    return printer.CStr();    
}

string Cerdito::aXML(const string& pPath){

    TiXmlDocument* doc = new TiXmlDocument(pPath.c_str());
    TiXmlDeclaration * decl = new TiXmlDeclaration( "1.0", "", "" );
    doc->LinkEndChild( decl );
    
    doc->LinkEndChild(this->aElementoXML());
    
    TiXmlPrinter printer;
    doc->Accept(&printer);
    return printer.CStr();    
}

void Cerdito::parseXML (const string& pDescriptor){

    TiXmlDocument doc;
    doc.Parse(pDescriptor.c_str(), 0, TIXML_ENCODING_UTF8);
    this->deElementoXML(doc.FirstChildElement());
}

TiXmlElement* Cerdito::aElementoXML (){
    
    TiXmlElement * element = new TiXmlElement(CERDITO);

    element->SetAttribute("nombre", this->Nombre().c_str());  
    element->LinkEndChild(this->getTrayectoria()->aElementoXML());
    
    return element;
}

void Cerdito::deElementoXML (TiXmlElement* pElemento){

    if (strcmp (pElemento->Value(),CERDITO) == 0)
    {
        this->setNombre(pElemento->Attribute("nombre"));
        
        Trayectoria* trayectoria = new Trayectoria ();
        trayectoria->deElementoXML (pElemento->FirstChildElement());
        this->setTrayectoria(trayectoria);
    }
}

